Crypto
谢谢大佬分享:https://github.com/hyperreality/ctf-writeups/tree/master/2019-plaidctf
这道Misc题我将它归类为Crypto,因为我觉得其中的运算更贴近数学领域。
首先看一下题目贴出的脚本:
1 | #!/usr/bin/env python3 |
需要注意gmpy2.fac(333)是333的阶乘,123…*333,表示为333!数学都忘光了哈哈
gmpy2.isqrt(N)是对N开根号,然后程序的逻辑就是要我们求一个同时满足N % k == 0并且Decimal(abs(k - sN)) / sN < 1e-8的整数
开始的时候尝试使用z3进行约束求解,但是不可行。
其实知道是阶乘运算之后,就可以挨个因子去测试,最终在相邻的因子间再做处理,直到得到小于1e-8的数字。
1 | #!/usr/bin/env python3 |
最终得到满足条件的整数:
...
...
0.9995539612695387806518950648
187
0.9161447186732907625562721817
188
14.84864817074804587686455766
189
187 True 0.9156986799428295432081672465
187 True 0.9152526412123683238600623113
187 True 0.9148066024819071045119573761
...
...
184 True 3.447727270606120732779613170E-9
Solution is 3214726350072257066431779235750840929219380986500824976682691501005045658412547178850613283446572126454848437809927102959300721991188613732891480424816898090401474090228882047516881401960775657269052068936565791968436947912579621385034525890482950410176853479808655903537176316978841327570169928228012032000000000000000000000000000000000000000000000